21. 列表和成员运算符
列表和成员运算符
此页面包含三个视频。请观看这些视频并查看其他帮助提醒!
L2 16a Listgs And Membership Operators V3
列表!
你在本视频中发现,你可以使用方括号创建列表。列表可以包含我们到目前为止所学的任何数据类型并且可以混合到一起。
lst_of_random_things = [1, 3.4, 'a string', True]
这是一个包含 4 个元素的类别。在 python 中,所有有序容器(例如列表)的起始索引都是 0。因此,要从上述列表中获取第一个值,我们可以编写以下代码:
>>> lst_of_random_things[0]
1
似乎你可以使用以下代码获取最后一个元素,但实际上不可行:
>>> lst_of_random_things[len(lst_of_random_things)]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-34-f88b03e5c60e> in <module>()
----> 1 list[len(list)]
IndexError: list index out of range
但是,你可以通过使索引减一获取最后一个元素。因此,你可以执行以下操作:
>>> lst_of_random_things[len(lst_of_random_things) - 1]
True
此外,你可以使用负数从列表的末尾开始编制索引,其中 -1 表示最后一个元素,-2 表示倒数第二个元素,等等。
>>> lst_of_random_things[-1]
True
>>> lst_of_random_things[-2]
a string
L2 16b Lists And Membership Operators V3
列表切片
你发现,我们可以使用
切片功能
从列表中提取多个值。在使用切片功能时,务必注意,
起始
索引
包含在内
,
终止
索引
排除在外
。(即,在上述视频示例中,6 是起始索引,9是终止索引)
因此:
>>> lst_of_random_things = [1, 3.4, 'a string', True]
>>> lst_of_random_things[1:2]
[3.4]
仅返回列表中的 3.4 。注意,这与单个元素索引依然不同,因为你通过这种索引获得了一个列表。冒号表示从冒号左侧的起始值开始,到右侧的元素(不含)结束。
如果你要从列表的开头开始,也可以省略起始值。
>>> lst_of_random_things[:2]
[1, 3.4]
或者你要返回到列表结尾的所有值,可以忽略最后一个元素。
>>> lst_of_random_things[1:]
[3.4, 'a string', True]
这种索引和字符串索引完全一样,返回的值将是字符串。
在
列表里还是
不在
列表里?
你发现,我们还可以使用
in
和
not in
返回一个
布尔值
,表示某个元素是否存在于列表中,或者某个字符串是否为另一个字符串的子字符串。
>>> 'this' in 'this is a string'
True
>>> 'in' in 'this is a string'
True
>>> 'isa' in 'this is a string'
False
>>> 5 not in [1, 2, 3, 4, 6]
True
>>> 5 in [1, 2, 3, 4, 6]
False
L2 16c Lists And Membership Operators II V4
可变性和顺序
可变性 是指对象创建完毕后,我们是否可以更改该对象。如果对象(例如列表)可以更改,则是 可变的 。但是,如果无法更改对象以创建全新的对象(例如字符串),则该对象是 不可变的 。
>>> my_lst = [1, 2, 3, 4, 5]
>>> my_lst[0] = 'one'
>>> print(my_lst)
['one', 2, 3, 4, 5]
正如上述代码所显示的,你可以将上述列表中的 1 替换为 'one。这是因为,列表是 可变的 。
但是,以下代码不可行:
>>> greeting = "Hello there"
>>> greeting[0] = 'M'
这是因为,字符串是 不可变的 。意味着如果要更改该字符串,你需要创建一个全新的字符串。
对于你要使用的每种数据类型,你都需要注意两个事项:
- 可变 吗?
- 有序 吗?
字符串和列表都是有序的。但是,你将在后续部分看到某些数据类型是无序的。对于接下来要遇到的每种数据类型,有必要理解如何设定索引,可变吗,有序吗。了解数据结构的这些信息很有用!
此外,你将发现每种数据类型有不同的方法,因此为何使用一种数据类型(而不是另一种)在很大程度上取决于这些特性,以及如何轻松地利用这些特性!